
import fs from 'fs'
import path from 'path'
import {obj} from '../controllers/books.js'
import { fileURLToPath, pathToFileURL } from 'url'
//定义findControllers()和registerRoute()函数
function findControllers(){
    // let absolutePath=path.resolve('./controllers/books.js')
    // console.log(absolutePath);
    // let controllerDir = new URL(`file:${absolutePath}`)

    let controllerUrl = new URL('../controllers',import.meta.url).href;// 使用es6的路径模块
    let controllerDir = fileURLToPath(controllerUrl);   //转换纯路径

    console.log(controllerDir);
    if(fs.existsSync(controllerDir)){
        let allFiles=fs.readdirSync(controllerDir);
        // console.log(allFiles);
        
        //readdirSync==>同步方法，因为这个同步方法只会在应用启动的时候执行一次，不会在平时阻塞线程，所以并不存在问题
        // let allControllerFiles=allFiles.filter(item=>item.endsWith('.js'))
        // .map(item=>`file:///${controllerDir}/${item}`);   //加上file:///是模块加载的要求

        // let allControllerFiles = allFiles.filter(item => item.endsWith('.js'))
        // .map(item => pathToFileURL(controllerDir + '/' + item));// 加载模块最好使用url的形式：file:///c:/XXXX

        let allControllerFiles=controllerDir+'/'+allFiles
        // console.log(allControllerFiles);
        
        return allControllerFiles;
    }
    return null;
}
function registerRoute(router,controllers){
    if (controllers === null) {
        return
    }
    //遍历所有的控制器，动态导入每个控制器模块
        //动态导入模块
        // let {obj}=await import (item)   //{obj}==>是controllers里的book.js里的对象
        //遍历模块中的对象
        for(let key in obj){
            let [keyMethod,keyPath]=key.split(' ');
            // console.log(key.split(' '));
            
            let keyFn=obj[key];
            // console.log(keyFn);
            // console.log(keyMethod);
            // console.log(keyPath);
            
            
            //判断请求的方法，使用相应的注册函数
            if(keyMethod==='get'){
                router.get(keyPath,keyFn)
                
            }
            if(keyMethod==='post'){
                router.post(keyPath,keyFn)
                
            }
            if(keyMethod==='delete'){
                router.delete(keyPath,keyFn)
            }
            if(keyMethod==='put'){
                router.put(keyPath,keyFn)
            }
        }
}
//导出
export const findAllControllers=findControllers
export const regRoute=registerRoute
